package org.demo.algorithm.lagou.column.relearn;

/*
    拉勾教育-专栏-重学数据结构与算法

    第一步，暴力破解。在没有任何时间、空间约束下，完成代码任务的开发。
    第二步，无效操作处理。将代码中的无效计算、无效存储剔除，降低时间或空间复杂度。
    1. 递归
    2. 二分法
    3. 排序算法
    4. 动态规划
    5. 贪心算法
    6. 回溯
    7. 双指针、快慢指针
    第三步，时空转换。设计(选择)合理数据结构，完成时间复杂度向空间复杂度的转移。
    首先分析代码对数据先后进行了那些操作。
    其次，这些操作中，哪个操作最影响效率，对时间复杂度的损耗最大?
    最后，根据分析出来的数据操作，找到合理的数据结构。
    > 降低空间复制度的核心思路是，能用低复杂度的数据结构能解决问题，就不要用高复杂度的数据结构。

    基础知识：
    1. 存储类型：顺序存储、链式存储
    2. 查找：按照位置条件查找、按照数据数值特征查找。
    3. 增、删：在数据结构中间操作、在数据结构最后操作。

    数据结构：
    线性表：列表(数组)、链表(单向、双向、循环、双向循环)、栈、队列
    字符串：
    树：二叉树(满二叉树、完全二叉树、二叉查找树：lvs、红黑树、线段树)
    hash表：普通hash表、LSH

    算法设计：
    建立算法、数据结构的索引
    分析问题特征及领域
    求其朴素解法
    消除不必要的操作
    根据特征及领域查找相关的算法与数据结构
 */
